/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package umlapp;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import umlapp.elements.AElement;

/**
 *
 * Trieda v ktorej sú uložené všetky prvky diagramu (elementy a vzťahy) vo forme ArrayList-u.
 *
 * @author Peter Chovanec
 * @author Mario Jaros
 */
public class Content implements Serializable {

    /**
     * Reťazec typu List, v ktorom sú uložené všetky elementy a vzťahy.
     */
    private ArrayList<AElement> elements;

    /**
     * Konštruktor triedy Content. Vytvorý nový ArrayList a priradí ho atribútu elements
     */
    public Content() {
        elements = new ArrayList<>();
    }

    /**
     * Metóda na získanie elemntu podľa pozícii na paneli. Zisťuje či sa na danej pozícii náchadza
     * nejaký element.
     *
     * @param x určuje x-vú súradnicu
     * @param y určuje y-vú súradnicu
     * @return vracia objekt typu AElement alebo null
     */
    public AElement getElement(int x, int y) {
        AElement pReturn = null;
        for (Iterator<AElement> it = elements.iterator(); it.hasNext();) {
            AElement element = it.next();
            int startX = element.getDimension().x;
            int startY = element.getDimension().y;
            int endX = element.getDimension().x + element.getDimension().width;
            int endY = element.getDimension().y + element.getDimension().height;
            if (startX < x && startY < y && endX > x && endY > y) {
                pReturn = element;
            }
        }
        return pReturn;
    }

    /**
     * Pridá objekt typu AElement do listu elements
     *
     * @param element inštancia objektu ktorý sa ma pridať do listu
     * @return vracia true ak je element pridaný, v opačnom prípade vracia false
     */
    public boolean addElement(AElement element) {
        return elements.add(element);
    }

    /**
     * Odstráni objekt typu AElement z listu elements
     *
     * @param element inštancia objektu, ktorý sa ma vymazať z listu
     * @return true ak je element vymazaný, v opačnom prípade vracia false
     */
    public boolean removeElement(AElement element) {
        return elements.remove(element);
    }

    /**
     * Metóda slúži na prístup k iteratoru listu elements
     *
     * @return iterator listu elements
     */
    public Iterator<AElement> iterator() {
        return elements.iterator();
    }
}
